/**
 * @Author: zxc
 * @Date: 2020-11-01 11:46:13
 * @func:最长子串
 */

//  /**
//  * @param {string} s
//  * @return {number}
//  */
// var lengthOfLongestSubstring = function(s) {
//   const arr = [];
//   let max = 0 , i =0 , len = s.length
//   for( ; i< len ; i++){
//       let idx = arr.indexOf(s[i])
//       if( idx !== -1){
//           arr.splice(0 , idx+1)
//       }
//       arr.push(s.charAt(i))
//       max = Math.max( max , arr.length)
//   }
//   return max
// };

// /**
//  * @param {string} s
//  * @return {number}
//  */
// var lengthOfLongestSubstring = function(s) {
//   let max = 0 , temp = '' , i = 0 ;
//   const len = s.length
//   for( ; i < len ; i++){
//       if(temp.includes(s[i])){
//           temp = temp.slice(temp.indexOf(s[i])+1)
//       }
//       temp += s[i]
//       max = Math.max(temp.length , max)
//   }
//   return max
// };

// /**
//  * @param {string} s
//  * @return {number}
//  */
// var lengthOfLongestSubstring = function(s) {
//   let leftIdx = 0 , rightIdx = 0 , idx = 0 , max = 0;
//   const len = s.length
//   for( ; rightIdx < len ; rightIdx++){
//       idx = s.substring(leftIdx,rightIdx).indexOf(s[rightIdx])
//       if(idx !== -1){
//           leftIdx = leftIdx + idx + 1
//       }
//       max = Math.max( max , rightIdx-leftIdx+1 )
//   }
//   return max
// };

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
  const map = new Map()
  let leftIdx = 0,
    rightIdx = 0,
    max = 0
  const len = s.length
  for (; rightIdx < len; rightIdx++) {
    if (map.has(s[rightIdx])) {
      leftIdx = Math.max(map.get(s[rightIdx]) + 1, leftIdx)
    }
    map.set(s[rightIdx], rightIdx)
    max = Math.max(max, rightIdx - leftIdx + 1)
  }
  return max
}
